package org.jsmpp;

/**
 * This contains all of the smpp constants.<br/>
 * <b>"CID"</b> prefix is for <b>command_id</b><br/>
 * <b>"STAT"</b> prefix is for <b>command_status</b>
 * 
 * @author uudashr
 * @version 1.0
 *
 */
public interface SMPPConstant {
	/*
	 * Untility constant
	 */
	/**
	 * Is the MASK for the response command_id.
	 */
	public static final int MASK_CID_RESP = 0x80000000;
	
	/*
	 * Command ID constants (CID prefix).
	 */
	public static final int CID_BIND_RECEIVER = 0x00000001;
	public static final int CID_BIND_TRANSMITTER = 0x00000002;
	public static final int CID_QUERY_SM = 0x00000003;
	public static final int CID_SUBMIT_SM = 0x00000004;
	public static final int CID_DELIVER_SM = 0x00000005;
	public static final int CID_UNBIND = 0x00000006;
	public static final int CID_REPLACE_SM = 0x00000007;
	public static final int CID_CANCEL_SM = 0x00000008;
	public static final int CID_BIND_TRANSCEIVER = 0x00000009;
	public static final int CID_OUTBIND = 0x0000000B;
	public static final int CID_ENQUIRE_LINK = 0x00000015;
	public static final int CID_SUBMIT_MULTI = 0x00000021;
	public static final int CID_ALERT_NOTIFICATION = 0x00000102;
	public static final int CID_DATA_SM = 0x00000103;
	public static final int CID_BROADCAST_SM = 0x00000111;
	public static final int CID_QUERY_BROADCAST_SM = 0x00000112;
	public static final int CID_CANCEL_BROADCAST_SM = 0x00000113;
	public static final int CID_GENERIC_NACK = 0x80000000;
	public static final int CID_BIND_RECEIVER_RESP = 0x80000001;
	public static final int CID_BIND_TRANSMITTER_RESP = 0x80000002;
	public static final int CID_QUERY_SM_RESP = 0x80000003;
	public static final int CID_SUBMIT_SM_RESP = 0x80000004;
	public static final int CID_DELIVER_SM_RESP = 0x80000005;
	public static final int CID_UNBIND_RESP = 0x80000006;
	public static final int CID_REPLACE_SM_RESP = 0x80000007;
	public static final int CID_CANCEL_SM_RESP = 0x80000008;
	public static final int CID_BIND_TRANSCEIVER_RESP = 0x80000009;
	public static final int CID_ENQUIRE_LINK_RESP = 0x80000015;
	public static final int CID_SUBMIT_MULTI_RESP = 0x80000021;
	public static final int CID_DATA_SM_RESP = 0x80000103;
	public static final int CID_BROADCAST_SM_RESP = 0x80000111;
	public static final int CID_QUERY_BROADCAST_SM_RESP = 0x80000112;
	public static final int CID_CANCEL_BROADCAST_SM_RESP = 0x80000113;
	
	/*
	 * Command Status constants (STAT prefix).
	 */
	
	public static final int STAT_ESME_ROK = 0x00000000;
	public static final int STAT_ESME_RINVMSGLEN = 0x00000001;
	public static final int STAT_ESME_RINVCMDLEN = 0x00000002;
	public static final int STAT_ESME_RINVCMDID = 0x00000003;
	
	
	
	/**
	 * Incorrect BIND Status for given command.
	 * <p>
	 * PDU has been sent in the wrong session state.<br> 
	 * E.g. sending a submit_sm without	first establishing a 
	 * Bound_TX session	state. 
	 */
	public static final int STAT_ESME_RINVBNDSTS = 0x00000004;
	
	/**
	 * ESME already in Bound State.
	 */
	public static final int STAT_ESME_RALYBND = 0x00000005;
	public static final int STAT_ESME_RINVPRTFLG = 0x00000006;
	public static final int STAT_ESME_RINVREGDLVFLG = 0x00000007;
	public static final int STAT_ESME_RSYSERR = 0x00000008;
	public static final int STAT_ESME_RINVSRCADR = 0x0000000A;
	public static final int STAT_ESME_RINVDSTADR = 0x0000000B;
	public static final int STAT_ESME_RINVMSGID = 0x0000000C;
	/**
	 * Bind Failed.
	 */
	public static final int STAT_ESME_RBINDFAIL = 0x0000000D;
	public static final int STAT_ESME_RINVPASWD = 0x0000000E;
	public static final int STAT_ESME_RINVSYSID = 0x0000000F;
	public static final int STAT_ESME_RCANCELFAIL = 0x00000011;
	public static final int STAT_ESME_RREPLACEFAIL = 0x00000013;
	/**
	 * Message queue full.
	 */
	public static final int STAT_ESME_RMSGQFUL = 0x00000014;
	public static final int STAT_ESME_RINVSERTYP = 0x00000015;
	public static final int STAT_ESME_RINVNUMDESTS = 0x00000033;
	public static final int STAT_ESME_RINVDLNAME = 0x00000034;
	public static final int STAT_ESME_RINVDESTFLAG = 0x00000040;
	public static final int STAT_ESME_RINVSUBREP = 0x00000042;
	public static final int STAT_ESME_RINVESMCLASS = 0x00000043;
	public static final int STAT_ESME_RCNTSUBDL = 0x00000044;
	public static final int STAT_ESME_RSUBMITFAIL = 0x00000045;
	public static final int STAT_ESME_RINVSRCTON = 0x00000048;
	public static final int STAT_ESME_RINVSRCNPI = 0x00000049;
	public static final int STAT_ESME_RINVDSTTON = 0x00000050;
	public static final int STAT_ESME_RINVDSTNPI = 0x00000051;
	public static final int STAT_ESME_RINVSYSTYP = 0x00000053;
	public static final int STAT_ESME_RINVREPFLAG = 0x00000054;
	public static final int STAT_ESME_RINVNUMMSGS = 0x00000055;
	public static final int STAT_ESME_RTHROTTLED = 0x00000058;
	public static final int STAT_ESME_RINVSCHED = 0x00000061;
	public static final int STAT_ESME_RINVEXPIRY = 0x00000062;
	/**
	 * Predefined Message Invalid or Not Found.
	 */
	public static final int STAT_ESME_RINVDFTMSGID = 0x00000063;
	public static final int STAT_ESME_RX_T_APPN = 0x00000064;
	public static final int STAT_ESME_RX_P_APPN = 0x00000065;
	public static final int STAT_ESME_RX_R_APPN = 0x00000066;
	public static final int STAT_ESME_RQUERYFAIL = 0x00000067;
	public static final int STAT_ESME_RINVTLVSTREAM = 0x000000C0;
	public static final int STAT_ESME_RTLVNOTALLWD = 0x000000C1;
	public static final int STAT_ESME_RINVTLVLEN = 0x000000C2;
	public static final int STAT_ESME_RMISSINGTLV = 0x000000C3;
	public static final int STAT_ESME_RINVTLVVAL = 0x000000C4;
	public static final int STAT_ESME_RDELIVERYFAILURE = 0x000000FE;
	public static final int STAT_ESME_RUNKNOWNERR = 0x000000FF;
	public static final int STAT_ESME_RSERTYPUNAUTH = 0x00000100;
	public static final int STAT_ESME_RPROHIBITED = 0x00000101;
	public static final int STAT_ESME_RSERTYPUNAVAIL = 0x00000102;
	public static final int STAT_ESME_RSERTYPDENIED = 0x00000103;
	public static final int STAT_ESME_RINVDCS = 0x00000104;
	public static final int STAT_ESME_RINVSRCADDRSUBUNIT = 0x00000105;
	public static final int STAT_ESME_RINVDSTADDRSUBUNIT = 0x00000106;
	public static final int STAT_ESME_RINVBCASTFREQINT = 0x00000107;
	public static final int STAT_ESME_RINVBCASTALIAS_NAME = 0x00000108;
	public static final int STAT_ESME_RINVBCASTAREAFMT = 0x00000109;
	public static final int STAT_ESME_RINVNUMBCAST_AREAS = 0x0000010A;
	public static final int STAT_ESME_RINVBCASTCNTTYPE = 0x0000010B;
	public static final int STAT_ESME_RINVBCASTMSGCLASS = 0x0000010C;
	public static final int STAT_ESME_RBCASTFAIL = 0x0000010D;
	public static final int STAT_ESME_RBCASTQUERYFAIL = 0x0000010E;
	public static final int STAT_ESME_RBCASTCANCELFAIL = 0x0000010F;
	public static final int STAT_ESME_RINVBCAST_REP = 0x00000110;
	public static final int STAT_ESME_RINVBCASTSRVGRP = 0x00000111;
	public static final int STAT_ESME_RINVBCASTCHANIND = 0x00000112;
	
	/*
	 * ESM class parameter constant
	 */
	// ESME -> SMSC Messaging Mode.
	public static final byte ESMCLS_DEFAULT_MODE = 0x00;
	public static final byte ESMCLS_DATAGRAM_MODE = 0x01;
	public static final byte ESMCLS_FORWARD_MODE = 0x02;
	public static final byte ESMCLS_STORE_FORWARD = 0x03;
	
	/**
	 * Encoded esm_class parameter.
	 * xx0000xx
	 */
	public static final byte ESMCLS_DEFAULT_MESSAGE_TYPE = 0x00;
	
	// ESME -> SMSC Message Type.
	/**
	 * Short Message contains ESME Delivery Acknowledgment.
	 * xx0010xx
	 */
	public static final byte ESMCLS_ESME_DELIVERY_ACK = 0x08;
	/**
	 * Short Message contains ESME Manual/User Acknowledgment.
	 * xx0100xx
	 */
	public static final byte ESMCLS_ESME_MANUAL_ACK = 0x10;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * xx0001xx Short Message contains SMSC Delivery Receipt.
	 */
	public static final byte ESMCLS_SMSC_DELIV_RECEIPT = 0x04;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * xx0001xx Short Message contains SME Deivery Acknoledgment.
	 */
	public static final byte ESMCLS_SME_DELIV_ACK = 0x08;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * xx0100xx Short Message contains SME Manual/User Acknowledgment.
	 */
	public static final byte ESMCLS_SME_MANUAL_ACK = 0x10;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * xx0110xx Short Message contains Conversation Abort (Korean CDMA).
	 */
	public static final byte ESMCLS_CONV_ABORT = 0x18;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * xx1000xx Short Message contains Intermediate Delivery Notification.
	 */
	public static final byte ESMCLS_INTRMD_DELIV_NOTIF = 0x20;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * 01xxxxxx UDHI Indicator set.
	 */
	public static final byte ESMCLS_UDHI_INDICATOR_SET = 0x40;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * 10xxxxxx Reply Path.
	 */
	public static final byte ESMCLS_REPLY_PATH = (byte)0x80;
	
	/**
	 * Encoded esm_class parameter for deliver_sm or data_sm (SMSC -> ESME)<br/>
	 * 11xxxxxx UDHI and Reply Path can use.
	 */
	public static final byte ESMCLS_UDHI_REPLY_PATH = (byte)0xc0;
	
	/*
	 * SMSC Delivery Receipt of registered delivery.
	 * bits 1 and 0
	 */
	
	/**
	 * No SMSC Delivery receipt.
	 * xxxxxx00
	 */
	public static final byte REGDEL_SMSC_NO = 0x00;
	
	/**
	 * SMSC Delivery Receipt requested where final delivery outcome is delivery
	 * success or failure.
	 * xxxxxx01
	 */
	public static final byte REGDEL_SMSC_SUCCESS_FAILURE_REQUESTED = 0x01;
	
	/**
	 * SMSC Deliver Receipt requested where final delivery outcome is delivery 
	 * failure.
	 * xxxxxx10
	 */
	public static final byte REGDEL_SMSC_FAILURE_REQUESTED = 0x02;
	
	/*
	 * SME originated Acknowldgement of registered delivery.
	 * bits 3 and 2
	 */
	
	/**
	 * No recipient SME Acknowledgement requested.
	 * xxxx00xx
	 */
	public static final byte REGDEL_SME_ACK_NO = 0x00;
	
	/**
	 * SME Delivery Acknowldgement requested.
	 * xxxx01xx
	 */
	public static final byte REGDEL_SME_DELIVERY_ACK_REQUESTED = 0x04;
	
	/**
	 * SME Manual/User Acknowledgement requested.
	 * xxxx10xx
	 */
	public static final byte REGDEL_SME_MANUAL_ACK_REQUESTED = 0x08;
	
	/**
	 * Both Delivery and Manual/User Acknowledgement requested.
	 */
	public static final byte REGDEL_SME_DELIVERY_MANUAL_ACK_REQUESTED = 0x0c;
	
	/*
	 * Data Coding.
	 */
	/**
	 * SMSC Default Alphabet.
	 * 00000000
	 */
	public static final byte DC_DEFAULT = 0x00;
	
	/**
	 * Octet unspecified (8-bit binary)
	 */
	public static final byte DC_BINARY = 0x04;
	
	/**
	 * UCS2 (ISO/IEC-10646)
	 * 00001000
	 */
	public static final byte DC_UCS2 = 0x08;
	
	/*
	 * interface_version
	 */
	public static final byte IF_VERSION_33 = 0x33;
	public static final byte IF_VERSION_34 = 0x34;
	public static final byte IF_VERSION_50 = 0x50;
	
	/*
	 * Type of Number
	 */
	public static final byte TON_UNKNOWN = 0x00;
	public static final byte TON_INTERNATIONAL = 0x01;
	public static final byte TON_NATIONAL = 0x02;
	public static final byte TON_NETWORK_SPECIFIC = 0x03;
	public static final byte TON_SUBSCRIBER_NUMBER = 0x04;
	public static final byte TON_ALPHANUMERIC = 0x05;
	public static final byte TON_ABBREVIATED = 0x06;
	
	/*
	 * Numeric Plan Indicator
	 */
	public static final byte NPI_UNKNOWN = 0x00;
	public static final byte NPI_ISDN = 0x01;
	public static final byte NPI_DATA = 0x02;
	public static final byte NPI_TELEX = 0x03;
	public static final byte NPI_LAND_MOBILE = 0x04;
	public static final byte NPI_NATIONAL = 0x08;
	public static final byte NPI_PRIVATE = 0x09;
	public static final byte NPI_ERMES = 0x10;
	public static final byte NPI_INTERNET = 0x14;
	public static final byte NPI_WAP = 0x18;
	
	public static final short TAG_SC_INTERFACE_VERSION = 0x0210;
	public static final short TAG_SAR_MSG_REF_NUM = 0X020C;
	public static final short TAG_SAR_TOTAl_SEGMENTS = 0x020e;
	public static final short TAG_SAR_SEGMENT_SEQNUM = 0x020f;
	
	/*
	 * Data Coding constants
	 */
	// Alphabet
	public static final byte MASK_ALPHA = 0x0f;
	public static final byte ALPHA_DEFAULT = 0x00; // 7-bit
    public static final byte ALPHA_UCS2 = 0x08;
}
